<?xml version="1.0" encoding="utf-8" ?>
<plugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="multiflexio-plugins.xsd">
    <plugin>
        <name>UsbComm</name>
        <connect-strings>
            <!-- Note: VID, PID and IFNO values must be in hexadecimal. -->
            
            <!-- Note: If you modify the regular expessions in this section, you must update
                 the functions in usbcomm/uri_parse.cpp to match. -->
			
            <!-- Form 1 -->
            <string>^usb://127.0.0.1\?vid=[0-9A-Fa-f]+&amp;pid=[0-9A-Fa-f]+&amp;interfaceno=[0-9A-Fa-f]+&amp;uniqueID=[%0-9A-Fa-f]+&amp;guid=[0-9A-Fa-f\-]+$</string>
            <!-- usb://127.0.0.1?vid=VID&pid=PID&interfaceno=IFNO&uniqueID=UNIQID&guid=GUID -->
            <!-- e.g.: usb://127.0.0.1?vid=03f0&pid=002a&interfaceno=1&uniqueID=6%10A1BCAE%0%0001&guid=4cf4b43d-4834-4595-9d59-9f1feb68b4d1 -->
            
            <!-- Form 2 -->
            <string>^usb://127.0.0.1\?vid=[0-9A-Fa-f]+&amp;pid=[0-9A-Fa-f]+&amp;interfaceno=[0-9A-Fa-f]+&amp;uniqueID=[%0-9A-Fa-f]+&amp;guid=[A-Za-z]+$</string>
            <!-- usb://127.0.0.1?vid=VID&pid=PID&interfaceno=IFNO&uniqueID=UNIQID&guid=TEXT-GUID -->
            <!-- e.g.: usb://127.0.0.1?vid=03f0&pid=002a&interfaceno=1&uniqueID=6%10A1BCAE%0%0001&guid=EWS -->
            
            <!-- Form 3 -->
            <string>^usb://vid=[0-9A-Fa-f]+&amp;pid=[0-9A-Fa-f]+&amp;interfaceno=[0-9A-Fa-f]+&amp;uniqueID=[%0-9A-Fa-f]+&amp;guid=[0-9A-Fa-f\-]+$</string>
            <!-- usb://vid=VID&pid=PID&interfaceno=IFNO&uniqueID=UNIQID&guid=GUID -->
            <!-- e.g.: usb://vid=03f0&pid=002a&interfaceno=1&uniqueID=6%10A1BCAE%0%0001&guid=4cf4b43d-4834-4595-9d59-9f1feb68b4d1 -->
            
            <!-- Form 4 -->
            <string>^usb://vid=[0-9A-Fa-f]+&amp;pid=[0-9A-Fa-f]+&amp;interfaceno=[0-9A-Fa-f]+&amp;uniqueID=[%0-9A-Fa-f]+&amp;guid=[A-Za-z]+$</string>
            <!-- usb://vid=VID&pid=PID&interfaceno=IFNO&uniqueID=UNIQID&guid=TEXT-GUID -->
            <!-- e.g.: usb://vid=03f0&pid=002a&interfaceno=1&uniqueID=6%10A1BCAE%0%0001&guid=EWS -->

            <!-- Form 5 -->
            <string>^usb://[0-9A-Fa-f]+/[0-9A-Fa-f]+/[0-9A-Fa-f]+/[0-9A-Fa-f\\-]+/[&amp;%0-9A-Fa-f]+$</string>
            <!-- usb://VID/PID/IFNO/GUID/UNIQID -->
            <!-- e.g.: usb://03f0/002a/1/4cf4b43d-4834-4595-9d59-9f1feb68b4d1/6&10A1BCAE&0&0001 -->

            <!-- Form 6 -->
            <string>^usb://[0-9A-Fa-f]+/[0-9A-Fa-f]+/[0-9A-Fa-f]+/[A-Za-z]+/[&amp;%0-9A-Fa-f]+$</string>
            <!-- usb://VID/PID/IFNO/TEXT-GUID/UNIQID -->
            <!-- e.g.: usb://03f0/002a/1/EWS/6&10A1BCAE&0&0001 -->

            <!-- Form 7 -->
            <string>^usb://[0-9A-Fa-f]+/[0-9A-Fa-f]+/[0-9A-Fa-f]+/[0-9A-Fa-f\\-]+$</string>
            <!-- usb://VID/PID/IFNO/GUID -->
            <!-- e.g.: usb://03f0/002a/1/4cf4b43d-4834-4595-9d59-9f1feb68b4d1 -->
            
            <!-- Form 8 -->
            <string>^usb://[0-9A-Fa-f]+/[0-9A-Fa-f]+/[0-9A-Fa-f]+/[A-Za-z]+$</string>
            <!-- usb://VID/PID/IFNO/TEXT-GUID -->
            <!-- e.g.: usb://03f0/002a/1/EWS -->
            
            <!-- Form 9 -->
            <string>^usb://[0-9A-Fa-f]+/[0-9A-Fa-f]+/[0-9A-Fa-f\\-]+$</string>
            <!-- usb://VID/PID/GUID -->
            <!-- e.g.: usb://03f0/002a/1/4cf4b43d-4834-4595-9d59-9f1feb68b4d1 -->
            
            <!-- Form 10 -->
            <string>^usb://[0-9A-Fa-f]+/[0-9A-Fa-f]+/[A-Za-z]+$</string>
            <!-- usb://VID/PID/TEXT-GUID -->
            <!-- e.g.: usb://03f0/002a/1/EWS -->

            <!-- Form 11 -->
			<!-- \\?\usb#...  Must quote '\' and '?' characters.-->
            <string>^\\\\\?\\[Uu][Ss][Bb]#.+$</string>
            <!-- Full Windows USB device path. -->
            
			<!-- Form 12 -->
            <string>^[Uu][Ss][Bb][0-9][0-9][0-9]$</string>
            <!-- e.g.: USB003 -->
            <!-- others as needed. -->

			<!-- Form 13 -->
			<!-- Symbolic link from Registry. -->
			<!-- \??\USB#...  Must quote '\' and '?' characters.-->
			<string>^\\\?\?\\[Uu][Ss][Bb]#[Vv][Ii][Dd]_[0-9A-Fa-f]+&amp;[Pp][Ii][Dd]_[0-9A-Fa-f]+#.+#\{[0-9A-Fa-f\-]+\}.*$</string>
        </connect-strings>
        <object>
            <win>
                <!-- Name of the DLL. -->
                <name>usbcomm.dll</name>
                <!-- Open Function.
                     size_t open( const wchar_t *uri, size_t *error )
                     You may pass NULL for *error.
                     Return value is to be used as a handle. -->
                <open>usb_comm_dll_open</open>
                <!-- Close Function.
                     size_t close( size_t handle, size_t *error )
                     handle is result of a previous open.
                     You may pass NULL for *error.
                     return value to be interpreted as boolean. -->
                <close>usb_comm_dll_close</close>
                <!-- Read Function.
                     size_t read( size_t handle, void *buffer, size_t num_to_read, size_t *num_read, size_t *error )
                     handle is result of a previous open.
                     You may pass NULL for *error.
                     return value to be interpreted as boolean. -->
                <read>usb_comm_dll_read</read>
                <!-- Write Function.
                     size_t write( size_t handle, const void *buffer, size_t num_to_write, size_t *num_wrote, size_t *error )
                     handle is result of a previous open.
                     You may pass NULL for *error.
                     return value to be interpreted as boolean. -->
                <write>usb_comm_dll_write</write>
            </win>
            <mac>
                <name>mvusbcomms.cf</name>
                <open>MarvellUsbCommOpen</open>
                <close>MarvellUsbCommClose</close>
                <read>MarvellUsbCommRead</read>
                <write>MarvellUsbCommWrite</write>
            </mac>
        </object>
    </plugin>
    <plugin>
        <name>NetComm</name>
        <connect-strings>
            <!-- Note: If you modify the regular expessions in this section, you must update
                 the functions in netcomm.cpp to match. -->
            <string>^[0-9]+.[0-9]+.[0-9]+.[0-9]+$</string>                  <!-- raw IP address -->
            <string>^[0-9]+.[0-9]+.[0-9]+.[0-9]+:[0-9]+$</string>           <!-- raw IP address and port -->
            <string>^ip://[0-9]+.[0-9]+.[0-9]+.[0-9]+$</string>             <!-- IP address -->
            <string>^ip://[0-9]+.[0-9]+.[0-9]+.[0-9]+:[0-9]+$</string>      <!-- IP address and port -->
            <string>^net://[.A-Za-z0-9\-]+$</string>                        <!-- network hostname (or IP)-->
            <string>^net://[.A-Za-z0-9\-]+:[0-9]+$</string>                 <!-- hostname (or IP) and port -->
			<string>^[0-9A-Fa-f]+:+[0-9A-Fa-f]*:*[0-9A-Fa-f]*:*[0-9A-Fa-f]*:*[0-9A-Fa-f]*:*[0-9A-Fa-f]*:*[0-9A-Fa-f]*:*[0-9A-Fa-f]*:*%*[0-9A-Fa-f]*$</string>					<!-- IPV6 -->
            <!-- others as needed. -->
        </connect-strings>
        <object>
            <win>
                <name>netcomm.dll</name>
                <open>net_comm_dll_open</open>
                <close>net_comm_dll_close</close>
                <read>net_comm_dll_read</read>
                <write>net_comm_dll_write</write>
            </win>
            <mac>
                <name>mvnetcomms.cf</name>
                <open>MarvellNetworkCommOpen</open>
                <close>MarvellNetworkCommClose</close>
                <read>MarvellNetworkCommRead</read>
                <write>MarvellNetworkCommWrite</write>
            </mac>
        </object>
    </plugin>
</plugins>
